
// export default class BindCall<T> {
//     private funcMap = new Map<T, Set<VoidFunction>>();

//     public on(key: T, func: VoidFunction): void {
//         const { funcMap } = this;
//         if (!funcMap.has(key)) {
//             funcMap.set(key, new Set());
//         }
//         funcMap.get(key)?.add(func);
//     }

//     public off(func: VoidFunction): void {
//         this.funcMap.forEach((list) => list.delete(func));
//     }

//     public emit(key: T): void {
//         const { funcMap } = this;
//         if (funcMap.has(key)) {
//             funcMap.get(key)?.forEach((func) => func());
//         }
//     }
// }
